home *** CD-ROM | disk | FTP | other *** search
/ Wonky Flux Batch 2019 02 / Wonky_Flux_Batch_2019-02.zip / Wonky Flux Batch 2019-02 / 057 - Algebra Workshop.dsk / FACTOR.bas < prev    next >
BASIC Source File  |  2019-02-17  |  13KB  |  349 lines

  1. 10  REM   "FACTORING QUADRATIC
  2. 15  REM        TRINOMIALS"
  3. 20  REM   
  4. 25  REM   Written by:
  5. 30  REM     Dennis Driscoll
  6. 35  REM     Public Schools
  7. 40  REM     Natick, MA  01760
  8. 45  REM   
  9. 50  REM   Date:
  10. 55  REM     August 1988
  11. 60  REM     
  12. 65  REM   Version 0.2
  13. 70  REM  <CTRL-J>
  14. 1000  REM 
  15. 1010  REM   ***  CONTROL MODULE  ***
  16. 1020  REM 
  17. 1030  GOSUB 10000: REM   TITLE SCREEN
  18. 1040  GOSUB 22000: REM   PROGRAM DESCRIPTION
  19. 1050  GOSUB 20000: REM   INITIALIZE ARRAYS
  20. 1060  GOSUB 21000: REM   INITIALIZE VARIABLES 
  21. 1070  GOSUB 37000: REM   COMPUTER OR USER GENERATED PROBLEM?
  22. 1080  GOSUB 23000: REM   GET VALUES FOR A,B,C
  23. 1090  GOSUB 24000: REM   PRINT TRINOMIAL
  24. 1100  GOSUB 25000: REM   VERIFY TRINOMIAL 
  25. 1110  GOSUB 26000: REM   FIND COMMON INTEGRAL FACTOR
  26. 1120  GOSUB 27000: REM   GET FACTOR PAIRS FOR 'C'
  27. 1130  GOSUB 28000: REM   GET FACTOR PAIRS FOR 'A' 
  28. 1140  GOSUB 33000: REM   PRINT FACTOR PAIRS
  29. 1150  GOSUB 29000: REM   FIND COMBINATION PRODUCING 'B'  
  30. 1160  GOSUB 34000: REM   USER SUPPLIED ANSWER
  31. 1170  GOSUB 30000: REM   PRINT FACTORED FORM 
  32. 1180  GOSUB 31000: REM   DO AGAIN? 
  33. 1190  GOTO 1060
  34. 1200  STOP :<CTRL-J>
  35. 10000  REM 
  36. 10010  REM   ***  TITLE SCREEN  ***
  37. 10020  REM 
  38. 10030  HOME 
  39. 10040  GOSUB 10190: REM  ROW OF *
  40. 10050  FOR X = 1 TO 2: GOSUB 10200: NEXT X
  41. 10060  PRINT "*";: HTAB 15: PRINT "FACTORING";: HTAB 39: PRINT "*"
  42. 10070  FOR X = 1 TO 2: GOSUB 10200: NEXT X
  43. 10080  PRINT "*";: HTAB 15: PRINT "QUADRATIC";: HTAB 39: PRINT "*"
  44. 10090  FOR X = 1 TO 2: GOSUB 10200: NEXT X
  45. 10100  PRINT "*";: HTAB 15: PRINT "TRINOMIALS";: HTAB 39: PRINT "*"
  46. 10110  FOR X = 1 TO 4: GOSUB 10200: NEXT X
  47. 10120  PRINT "*";: HTAB 12: PRINT "Dennis Driscoll";: HTAB 39: PRINT "*"
  48. 10130  GOSUB 10200
  49. 10140  PRINT "*";: HTAB 9: PRINT "Natick Public Schools";: HTAB 39: PRINT "*"
  50. 10150  FOR X = 1 TO 2: GOSUB 10200: NEXT X
  51. 10160  PRINT "*";: HTAB 5: PRINT "(Dedicated to my friend Julie.)";: HTAB 39: PRINT "*"
  52. 10170  GOSUB 10190
  53. 10180  GOSUB 32000: RETURN 
  54. 10190  FOR X = 1 TO 39: PRINT "*";: NEXT X: PRINT : RETURN 
  55. 10200  PRINT "*";: HTAB 39: PRINT "*": RETURN 
  56. 10210  REM :<CTRL-J>
  57. 20000  REM 
  58. 20010  REM   ***  DIMENSION  ARRAYS  ***  
  59. 20020  REM 
  60. 20030  DIM A1(50),A2(50),C1(50),C2(50)
  61. 20040  RETURN :<CTRL-J>
  62. 21000  REM 
  63. 21010  REM   ***  INITIALIZE VARIABLES  ***
  64. 21020  REM 
  65. 21030 K = 0:L = 0:F1 = 0:F2 = 0:F3 = 0:F4 = 0:A = 0:B = 0:C = 0
  66. 21040 PR$ = ""
  67. 21050 F$ = "FACTORABLE"
  68. 21060 DT$ = "NEW"
  69. 21070 GCD = 1
  70. 21080  RETURN :<CTRL-J>
  71. 22000  REM 
  72. 22010  REM   ***  PROGRAM DESCRIPTION  ***
  73. 22020  REM 
  74. 22030  HOME 
  75. 22040  PRINT "This program will factor quadratic"
  76. 22050  PRINT : PRINT "trinomials of the form:"
  77. 22060  PRINT 
  78. 22070  HTAB 15: PRINT "2"
  79. 22080  HTAB 13: PRINT "Ax  + Bx + C"
  80. 22090  PRINT : PRINT "The program allows the trinomial to be "
  81. 22100  PRINT : PRINT "input by the user or generated by the"
  82. 22110  PRINT : PRINT "computer.  It begins the factoring"
  83. 22120  PRINT : PRINT "process by working with the user to"
  84. 22130  PRINT : PRINT "identify and factor out any common"
  85. 22140  PRINT : PRINT "factor."
  86. 22150  GOSUB 32000
  87. 22160  HOME 
  88. 22170  PRINT : PRINT "The program continues by listing factor"
  89. 22180  PRINT : PRINT "pairs for the coefficient of the "
  90. 22190  PRINT : PRINT "quadratic term and the constant term."
  91. 22200  PRINT : PRINT "The user may then attempt to factor"
  92. 22210  PRINT : PRINT "the remaining trinomial or have the"
  93. 22220  PRINT : PRINT "computer print the result."
  94. 22230  GOSUB 32000
  95. 22240  RETURN :<CTRL-J>
  96. 23000  REM 
  97. 23010  REM   ***  GET VALUES FOR A,B,C  ***
  98. 23020  REM 
  99. 23030  IF PR$ = "2"  THEN 23170
  100. 23040  REM   
  101. 23050  REM    User Generated Problem  
  102. 23060  HOME 
  103. 23070  HTAB 15: PRINT "2"
  104. 23080  HTAB 13: PRINT "Ax  + Bx + C"
  105. 23090  PRINT : PRINT 
  106. 23100  PRINT "Please input the values for A, B, and C."
  107. 23110  PRINT 
  108. 23120  INPUT "A? ";A
  109. 23130  INPUT "B? ";B
  110. 23140  INPUT "C? ";C
  111. 23150  GOTO 23230
  112. 23160  REM 
  113. 23170  REM   Computer Generated Problem
  114. 23180  REM 
  115. 23190  IF DT$ = "OLD"  THEN 23220: REM  SAME DIFF LEVEL AS LAST PROB
  116. 23200 SR$ = "DL" + STR$(CH)
  117. 23210  READ D$: IF D$ < >SR$  THEN 23210
  118. 23220  READ A,B,C: IF A = 0  THEN  RESTORE :DT$ = "NEW": GOTO 23210
  119. 23230  RETURN :<CTRL-J>
  120. 24000  REM   
  121. 24010  REM   ***  PRINT TRINOMIAL  ***
  122. 24020  REM 
  123. 24030  PRINT : PRINT 
  124. 24040  IF GCD < >1  AND A = 1  THEN  HTAB  LEN( STR$(GCD)) +3: PRINT 2
  125. 24050  IF GCD = 1  AND A = 1  THEN  HTAB 2: PRINT 2
  126. 24060  IF GCD < >1  AND A < >1  THEN  HTAB  LEN( STR$(GCD)) + LEN( STR$(A)) +3: PRINT 2
  127. 24070  IF GCD = 1  AND A < >1  THEN  HTAB  LEN( STR$(A)) +2: PRINT 2
  128. 24080  IF GCD < >1  THEN  PRINT GCD;"(";
  129. 24090  IF A < >1  THEN  PRINT A;
  130. 24100  PRINT "x ";
  131. 24110  IF  SGN(B) =  -1  THEN  PRINT "- ";
  132. 24120  IF  SGN(B) < > -1  THEN  PRINT "+ ";
  133. 24130  PRINT  ABS(B);"x ";
  134. 24140  IF  SGN(C) =  -1  THEN  PRINT "- ";
  135. 24150  IF  SGN(C) < > -1  THEN  PRINT "+ ";
  136. 24160  PRINT  ABS(C);
  137. 24170  IF GCD < >1  THEN  PRINT ")";
  138. 24180  RETURN :<CTRL-J>
  139. 25000  REM  
  140. 25010  REM   ***  VERIFY TRINOMIAL  ***   
  141. 25020  REM 
  142. 25030  IF PR$ = "2"  THEN 25100: REM  computer generated prob
  143. 25040  PRINT : PRINT : PRINT "IS THIS CORRECT (Y/N)? ";
  144. 25050  GET ANS$: GOSUB 35000:S$ = ANS$
  145. 25060  IF S$ = "N"  OR S$ = "n"  THEN  RUN 1060
  146. 25070  IF S$ = "Y"  OR S$ = "y"  THEN 25100
  147. 25080  PRINT "PLEASE ANSWER 'YES' OR 'NO'"
  148. 25090  GOTO 25040
  149. 25100  RETURN :<CTRL-J>
  150. 26000  REM 
  151. 26010  REM   ***  CHECK FOR COMMON FACTOR  ***
  152. 26020  REM 
  153. 26030  HOME : PRINT : GOSUB 24000: REM     PRINT TRINOMIAL  
  154. 26040 A1 = A:B1 = B: GOSUB 36000: REM  COMMON FACTOR FOR A,B
  155. 26050 A1 = C: GOSUB 36000: REM  COMMON FACTOR FOR A,B,C
  156. 26060 GCD = B1
  157. 26070  IF  SGN(A) < > SGN(GCD)  THEN GCD =  -GCD
  158. 26080  PRINT : PRINT : PRINT "Do the terms of this trinomial have a"
  159. 26090  PRINT : PRINT "common factor other than 1 (Y/N)? ";: GET ANS$: GOSUB 35000
  160. 26100  IF ANS$ = "Y"  OR ANS$ = "y"  THEN 26140
  161. 26110  IF  ABS(GCD) = 1  THEN  PRINT : PRINT "Correct!":GCD = 1: GOTO 26230
  162. 26120  PRINT : PRINT "Look again.  The numbers ";A;", ";B: PRINT : PRINT "and ";C;" do have a common factor."
  163. 26130  GOTO 26170
  164. 26140  IF GCD < >1  THEN  PRINT : PRINT "Correct!": GOTO 26170
  165. 26150  PRINT : PRINT "Look again.  The numbers": PRINT : PRINT A;", ";B;" and ";C;" have": PRINT : PRINT "no common factor other than 1."
  166. 26160  GOTO 26230
  167. 26170 TR = 0
  168. 26180  PRINT : PRINT "What is the common factor";: INPUT CF
  169. 26190 TR = TR +1
  170. 26200  IF CF = GCD  OR CF =  -GCD  THEN  PRINT : PRINT "Correct!":GCD = CF: GOTO 26230
  171. 26210  IF TR >1  THEN  PRINT : PRINT "No, the common factor is ";GCD;".": GOTO 26230
  172. 26220  PRINT : PRINT "That's not it.  Try again.": GOTO 26180
  173. 26230  GOSUB 32000
  174. 26240  HOME : IF GCD = 1  THEN 26280
  175. 26250  PRINT "When we factor out the ";GCD
  176. 26260  PRINT : PRINT "the expression becomes"
  177. 26270 A = A/GCD:B = B/GCD:C = C/GCD: REM   Reduce A,B,C
  178. 26280  GOSUB 24000: PRINT 
  179. 26290  RETURN :<CTRL-J>
  180. 27000  REM 
  181. 27010  REM   ***  GET FACTOR PAIRS OF C  ***
  182. 27020  REM   
  183. 27030  FOR X = 1 TO  INT( SQR( ABS(C)))
  184. 27040  IF C/X =  INT(C/X)  THEN K = K +1:C1(K) = X:C2(K) =  INT(C/X): IF C <0  OR (C >0  AND B <0)  THEN K = K +1:C1(K) =  -X:C2(K) =  - INT(C/X)
  185. 27050  NEXT X
  186. 27060  RETURN :<CTRL-J>
  187. 28000  REM 
  188. 28010  REM   ***  GET FACTOR PAIRS FOR 'A'  ***
  189. 28020  REM 
  190. 28030  FOR X = 1 TO  INT( SQR( ABS(A)))
  191. 28040  IF A/X =  INT(A/X)  THEN L = L +1:A1(L) = X:A2(L) =  INT(A/X): IF A <0  THEN L = L +1:A1(L) =  -X:A2(L) =  - INT(A/X)
  192. 28050  NEXT X
  193. 28060  RETURN :<CTRL-J>
  194. 29000  REM 
  195. 29010  REM   ***  FIND PAIRS PRODUCING 'B'  ***
  196. 29020  REM 
  197. 29030  FOR X = 1 TO K
  198. 29040  FOR Y = 1 TO L
  199. 29050  IF A1(Y) *C1(X) +A2(Y) *C2(X) = B  THEN F1 = A1(Y):F2 = C2(X):F3 = A2(Y):F4 = C1(X): GOTO 29110
  200. 29060  IF A1(Y) *C2(X) +A2(Y) *C1(X) = B  THEN F1 = A1(Y):F2 = C1(X):F3 = A2(Y):F4 = C2(X): GOTO 29110
  201. 29070  NEXT Y
  202. 29080  NEXT X
  203. 29090  IF GCD = 1  THEN F$ = "PRIME"
  204. 29100  IF GCD < >1  THEN F$ = "IRREDUCIBLE"
  205. 29110  RETURN :<CTRL-J>
  206. 30000  REM 
  207. 30010  REM   ***  PRINT FACTORED FORM  ***
  208. 30020  REM 
  209. 30030  PRINT : GOSUB 24000: PRINT " IS ";F$;".": IF F$ < >"FACTORABLE"  THEN 30170
  210. 30040  PRINT : PRINT "THE FACTORED FORM IS:": PRINT 
  211. 30050  IF GCD < >1  THEN  PRINT GCD;
  212. 30060  PRINT "(";
  213. 30070  IF A = 1  THEN  PRINT "x ";
  214. 30080  IF A < >1  THEN  PRINT F1;"x ";
  215. 30090  IF F2 <0  THEN  PRINT "- ";
  216. 30100  IF F2 > = 0  THEN  PRINT "+ ";
  217. 30110  PRINT  ABS(F2);")(";
  218. 30120  IF A = 1  THEN  PRINT "x ";
  219. 30130  IF A < >1  THEN  PRINT F3;"x ";
  220. 30140  IF F4 <0  THEN  PRINT "- ";
  221. 30150  IF F4 > = 0  THEN  PRINT "+ ";
  222. 30160  PRINT  ABS(F4);")"
  223. 30170  RETURN :<CTRL-J>
  224. 31000  REM 
  225. 31010  REM   ***  DO AGAIN?  ***
  226. 31020  REM 
  227. 31030  PRINT : PRINT 
  228. 31040  PRINT "DO ANOTHER (Y/N)? ";: GET ANS$: GOSUB 35000
  229. 31050  IF ANS$ < >"N"  AND ANS$ < >"n"  THEN 31080
  230. 31060 D$ =  CHR$(4)
  231. 31070  POKE 34,0: PRINT  CHR$(4);"RUN MENU"
  232. 31080  RETURN :<CTRL-J>
  233. 32000  REM 
  234. 32010  REM   ***  WAIT TO CONTINUE  ***
  235. 32020  REM 
  236. 32030  VTAB 23
  237. 32040  HTAB 7: PRINT "Press any key to continue.";: GET ANS$
  238. 32050  RETURN :<CTRL-J>
  239. 33000  REM 
  240. 33010  REM   ***  PRINT FACTOR PAIRS  ***
  241. 33020  REM 
  242. 33030  PRINT : PRINT 
  243. 33040  PRINT "Let's see if the trinomial can be": PRINT 
  244. 33050  PRINT "factored.  We must first find factor": PRINT : PRINT "pairs for ";A;" and ";C;"."
  245. 33060  GOSUB 32000: HOME : GOSUB 24000: PRINT : PRINT 
  246. 33070  PRINT "Factors of ";A,"Factors of ";C
  247. 33080  PRINT 
  248. 33090 G = K: IF L >K  THEN G = L
  249. 33100  FOR X = 1 TO G
  250. 33110  IF A1(X) < >0  AND C1(X) < >0  THEN  PRINT A1(X);", ";A2(X),C1(X);", ";C2(X)
  251. 33120  IF A1(X) < >0  AND C1(X) = O  THEN  PRINT A1(X);", ";A2(X)
  252. 33130  IF A1(X) = 0  AND C1(X) < >0  THEN  PRINT ,C1(X);", ";C2(X)
  253. 33140  NEXT X
  254. 33150  RETURN :<CTRL-J>
  255. 34000  REM 
  256. 34010  REM   ***  USER INPUT SOLUTION  ***
  257. 34020  REM 
  258. 34030  PRINT : PRINT "Can you find a combination of these": PRINT : PRINT "factor pairs that works (Y/N)? ";: GET ANS$: GOSUB 35000
  259. 34040  IF ANS$ = "N"  OR ANS$ = "n"  THEN 34190
  260. 34050  IF ANS$ < >"N"  AND ANS$ < >"n"  AND ANS$ < >"Y"  AND ANS$ < >"y"  THEN  PRINT : GOTO 34030
  261. 34060  PRINT : IF GCD < >1  THEN  PRINT GCD;
  262. 34070  PRINT "(";: INVERSE : PRINT "J";: NORMAL : PRINT "x + ";: INVERSE : PRINT "K";: NORMAL : PRINT ")(";: INVERSE : PRINT "L";: NORMAL : PRINT "x + ";: INVERSE : PRINT "M";: NORMAL : PRINT ")"
  263. 34080  PRINT : PRINT "You must tell me the values"
  264. 34090  PRINT "for J, K, L, and M."
  265. 34100  PRINT : INPUT "What is the value for J? ";J
  266. 34110  INPUT "What is the value for K? ";K
  267. 34120  INPUT "What is the value for L? ";L
  268. 34130  INPUT "What is the value for M? ";M
  269. 34140  IF (J = F1  AND K = F2  AND L = F3  AND M = F4)  OR (J = F3  AND K = F4  AND L = F1  AND M = F2)  THEN  PRINT : PRINT "That's correct!": RETURN 
  270. 34150  PRINT : PRINT "That's not quite correct."
  271. 34160  PRINT "Want to try again (Y/N)? ";: GET ANS$
  272. 34170  IF ANS$ = "Y"  OR ANS$ = "y"  THEN  PRINT : GOTO 34060
  273. 34180  IF ANS$ < >"N"  AND ANS$ < >"n"  THEN 34160
  274. 34190  PRINT : PRINT "Press any key to see factored form.";: GET G$
  275. 34200  RETURN :<CTRL-J>
  276. 35000  REM 
  277. 35010  REM   ***  FINISH ANSWER  ***
  278. 35020  REM 
  279. 35030  IF ANS$ = "Y"  OR ANS$ = "y"  THEN  PRINT "Yes"
  280. 35040  IF ANS$ = "N"  OR ANS$ = "n"  THEN  PRINT "No"
  281. 35050  RETURN :<CTRL-J>
  282. 36000  REM 
  283. 36010  REM    ***  FIND COMMON INTEGRAL FACTOR  ***  
  284. 36020  REM    ***   USING EUCLIDEAN ALGORITHM   ***  
  285. 36030  REM 
  286. 36040 Q =  INT(A1/B1): REM    DIVIDE A1 BY B1
  287. 36050 R = A1 -Q *B1: REM    REMAINDER  
  288. 36060  IF R = 0  THEN 36090: REM     ALGORITHM FINISHED, GCD IS B1 
  289. 36070  REM    IF R<>0, MUST DO ANOTHER DIVISION  
  290. 36080 A1 = B1:B1 = R: GOTO 36040
  291. 36090  RETURN :<CTRL-J>
  292. 37000  REM 
  293. 37010  REM   *** COMPUTER OR USER GENERATED PROB  ***
  294. 37020  REM 
  295. 37030  HOME 
  296. 37040  VTAB 10
  297. 37050  HTAB 5
  298. 37060  PRINT "Who should make up the problem?"
  299. 37070  PRINT : PRINT 
  300. 37080  HTAB 10: PRINT "(1) You"
  301. 37090  PRINT : HTAB 10: PRINT "(2) Computer"
  302. 37100  VTAB 20
  303. 37110  HTAB 5
  304. 37120  PRINT "Your choice (1 or 2)? ";
  305. 37130  GET PR$: IF PR$ < >"1"  AND PR$ < >"2"  THEN 37030
  306. 37140  IF PR$ = "1"  THEN 37300
  307. 37150 PRV = CH
  308. 37160  HOME 
  309. 37170  VTAB 3: HTAB 12: PRINT "Difficulty Level"
  310. 37180  PRINT : PRINT 
  311. 37190  HTAB 5: PRINT "(1)  Quadratic coefficient = 1"
  312. 37200  HTAB 10: PRINT "Constant term is positive"
  313. 37210  PRINT : HTAB 5: PRINT "(2)  Quadratic coefficient = 1"
  314. 37220  HTAB 10: PRINT "Constant term is negative"
  315. 37230  PRINT : HTAB 5: PRINT "(3)  Quadratic coefficient is an"
  316. 37240  HTAB 10: PRINT "integer greater than 1"
  317. 37250  PRINT : HTAB 5: PRINT "(4)  Quadratic coefficient is an
  318. 37260  HTAB 10: PRINT "integer less than 0"
  319. 37270  VTAB 20: HTAB 5: PRINT "Your choice (1, 2, 3, or 4)? ";
  320. 37280  GET CH: IF CH <1  OR CH >4  OR CH < > INT(CH)  THEN 37160
  321. 37290  IF PRV = CH  THEN DT$ = "OLD"
  322. 37300  RETURN :<CTRL-J>
  323. 38000  REM 
  324. 38010  REM   DATA FOR COMPUTER GENERATED PROBS
  325. 38020  REM 
  326. 38030  REM 
  327. 38040  REM   DIFFICULTY LEVEL 1
  328. 38050  DATA  DL1
  329. 38060  DATA   1,6,5,1,-4,3,1,9,18,1,-11,28,1,-13,42  
  330. 38070  DATA  1,-17,50,1,16,55,1,-17,72,1,-12,20,1,-12,35
  331. 38080  DATA  0,0,0
  332. 38090  REM 
  333. 38100  REM  DIFFICULTY LEVEL 2
  334. 38110  DATA  DL2
  335. 38120  DATA   1,4,-5,1,-5,-6,1,-11,-10,1,-6,-18,1,2,-35
  336. 38130  DATA  1,5,-36,1,-4,-21,1,-5,-30,1,-1,-30,1,-5,-50
  337. 38140  DATA  0,0,0
  338. 38150  REM 
  339. 38160  REM  DIFFICULTY LEVEL 3
  340. 38170  DATA  DL3
  341. 38180  DATA   2,5,3,5,6,1,7,-8,1,5,-16,3,3,-5,1
  342. 38190  DATA   2,-1,-6,8,-1,-9,7,19,-6,6,-1,-3,2,-1,-10
  343. 38200  DATA  0,0,0
  344. 38210  REM 
  345. 38220  REM  DIFFICULTY LEVEL 4
  346. 38230  DATA  DL4
  347. 38240  DATA   -2,-7,-3,-8,-6,-1,-14,9,-1,-7,18,-8,-3,-1,2
  348. 38250  DATA  -3,-2,5,-9,-3,2,-3,7,-6,-2,3,10,-4,-23,6
  349. 38260  DATA  0,0,0